package kr.co.bettersoft.pushchat.activity;

import java.util.Locale;

import kr.co.bettersoft.pushchat.common.CommonConstant;
import kr.co.bettersoft.pushchat.fragment.FragmentHome;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.view.Window;

public class SettingsSettingActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{
	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	String TAG = "MainSettings";
	//		int app_end = 0;	// 뒤로가기 버튼으로 닫을때 2번만에 닫히도록

	// 공용 프립스
	SharedPreferences sharedPrefCustom;		
	int sharePrefsFlag = 1;		

	// 가맹점 아이디
	static String merchantId;
	// 로케일
	Locale systemLocale = null ;
	String strCountry;
	static String countryCode;
	static String languageCode;

	///////////////////////////////////////////////////////////////////////////////////////////////////////////

	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			try{
				Bundle b = msg.getData();		
				if(b.getInt("showConfirm")==1){				// 확인창. 알림 수신 끔
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant. alertTitle )                                        	
					.setIcon(R.drawable.ic_dialog_img)
					.setMessage(b.getString("msg"))
					.setCancelable(true)
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int id) {
							Log.d(TAG,"alarm off");
						}
					})
					.setNegativeButton(android.R.string.no, null)		 
					.show();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//			requestWindowFeature( Window.FEATURE_NO_TITLE );		// no title //err
		addPreferencesFromResource(R.xml.settings_setting_activity);

		sharedPrefCustom = getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
		sharedPrefCustom.registerOnSharedPreferenceChangeListener(this);	

		// 가맹점 아이디를 꺼낸다.
		merchantId = sharedPrefCustom.getString("merchantId", "");

		//사용자 지역
		systemLocale = getResources().getConfiguration().locale;
		strCountry = systemLocale.getCountry();
		Log.d(TAG,"strCountry:"+strCountry);
		CommonConstant.countryCode = strCountry;


		//			Boolean savedAutoLoginYn = sharedPrefCustom.getBoolean("autoLoginChecked", false);	
		//			if(savedAutoLoginYn){		// 들어올때 설정했다면 설정상태로
		//				CheckBoxPreference preference_alarm_chk = (CheckBoxPreference)findPreference("preference_auto_login_chk");
		//				preference_alarm_chk.setChecked(true);	
		//			}

		SharedPreferences.Editor init2 = sharedPrefCustom.edit();		 		// 강제 호출용도  .. 단어명은 의미없지만 리스너에서 꺼낼때와 일치해야함.
		int someNum = sharedPrefCustom.getInt("sharePrefsFlag", sharePrefsFlag);	// 이전 값과 같을수 있으므로.
		someNum = someNum * -1;													// 매번 다른 값이 들어가야 제대로 호출이 된다. 같은 값 들어가면 x		
		init2.putInt("sharePrefsFlag", someNum); 								// 프리퍼런스 값 넣어 업데이트 시키면 강제로 리스너 호출.
		init2.commit();			
		// 자체 프리퍼를 지목할 수 있게 됨. 프리퍼런스 동기화를 위함.
	}


	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 프리퍼런스 관련

	// 프리퍼런스 리스너. (터치시 동작)
	/**
	 * onPreferenceTreeClick
	 *  프리퍼런스 리스너이다. (메뉴 선택시에 대한 동작 구현)
	 *
	 * @param preferenceScreen
	 * @param preference
	 * @return
	 */
	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {

		// 자주 묻는 질문 -> 인텐트로 웹뷰 실시
		if(preference.equals(findPreference("pref_app_qna"))){
			Intent webIntent = new Intent(SettingsSettingActivity.this, myWebView.class);
			webIntent.putExtra("loadingURL", CommonConstant.qnaURL);	
			webIntent.putExtra("isGetMethod", "true");
			startActivity(webIntent);
		}
		// 이용 약관. -> 웹뷰로
		if(preference.equals(findPreference("pref_app_terms"))){
			Intent webIntent = new Intent(SettingsSettingActivity.this, myWebView.class);
			webIntent.putExtra("loadingURL", CommonConstant.termsPolicyURL);
			webIntent.putExtra("isGetMethod", "true");
			startActivity(webIntent);
		}
		// 개인정보 보호정책 -> 웹뷰로
		if(preference.equals(findPreference("pref_app_privacy"))){
			Intent webIntent = new Intent(SettingsSettingActivity.this, myWebView.class);
			webIntent.putExtra("loadingURL", CommonConstant.privacyPolicyURL);
			webIntent.putExtra("isGetMethod", "true");
			startActivity(webIntent);
		}

		// 이 앱은 ? pref_app_what
		if(preference.equals(findPreference("pref_app_what"))){
			Intent aboutIntent = new Intent(SettingsSettingActivity.this, SettingsWhatIsThisApp.class);
			startActivity(aboutIntent);
		}
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}	


	// 프리퍼런스 값 변경시 동작. 리스너. 
	/**
	 * onSharedPreferenceChanged
	 *  프리퍼런스 값 변경시 동작되는리스너이다.
	 *
	 * @param sharedPreferences
	 * @param key
	 * @return
	 */
	@Override
	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
			String key) {
		if(key.equals("sharePrefsFlag")){		// oncreate 에서 넣은 것과 이름 일치해야 동작한다.   프리퍼런스 동기화 용도
			sharedPrefCustom = sharedPreferences;
		}
		//			// 자동 로그인 설정 변경시 로그인 용 설정에 저장.
		//			if(key.equals("preference_auto_login_chk")){		
		//				// 자동 로그인 설정 변경시 공유 프리퍼런스에 저장한다. --> 나중에 어플 재기동시 꺼내어 바로 통과 시킬수 있다. 
		//				Boolean autoLoginYn = ((CheckBoxPreference)findPreference("preference_auto_login_chk")).isChecked();
		//				SharedPreferences.Editor autoLogin = sharedPrefCustom.edit();
		//				autoLogin.putBoolean("autoLogin", autoLoginYn);
		//				autoLogin.putString("merchantId", merchantId);
		//				autoLogin.putString("countryCode", countryCode);		
		//				autoLogin.putString("languageCode", languageCode);
		//				autoLogin.commit();
		//				FragmentHome.autoLogin = autoLoginYn;
		////				Log.d(TAG,"merchantId:"+merchantId+"/countryCode:"+countryCode+"/languageCode:"+languageCode+"/autoLogin:"+autoLogin);
		//				Log.d(TAG,"auto login setting changed.."+autoLoginYn);
		//			}
	}	

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 유틸	

	public Context returnThis(){
		return this;
	}


	// 확인을 받는 컨펌 창을 띄운다
	/**
	 * showConfirmDialog
	 *  확인을 받는 컨펌 창을 띄운다
	 *
	 * @param showConfirmCode
	 * @param msg
	 * @return 
	 */
	public void showConfirmDialog(final String msg){
		new Thread(
				new Runnable(){
					public void run(){
						Message message = handler.obtainMessage();				
						Bundle b = new Bundle();
						b.putInt("showConfirm", 1);			// 1. 알림수신 여부 확인
						b.putString("msg", msg);			// 화면에 보여줄 메시지
						message.setData(b);
						handler.sendMessage(message);
					}
				}
		).start();
	}


	/**
	 * onResume
	 *  액티비티 리쥼시 프리퍼런스 리스너를 등록한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override
	public void onResume(){	
		super.onResume();
		//			app_end = 0;				// 뒤로가기 두번만에 닫히도록 초기화.
		getPreferenceScreen().getSharedPreferences() 			// 리스너 on
		.registerOnSharedPreferenceChangeListener(this); 

	}
	/**
	 * onResume
	 *  액티비티 Pause시 프리퍼런스 리스너를 해제한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	@Override 
	protected void onPause() { 
		super.onPause(); 
		// Unregister the listener whenever a key changes 
		getPreferenceScreen().getSharedPreferences() 			// 리스너 off
		.unregisterOnSharedPreferenceChangeListener(this); 
	} 

}
